package com.qingzhuge.limiter.support;


import com.qingzhuge.limiter.dto.RateLimiterConfig;
import com.qingzhuge.limiter.dto.RateLimiterForm;

import java.util.List;

/**
 * @author zeroxiao
 * @date 2019/9/4 17:35
 * 业务回调
 */
public interface RateLimiterCallback {
    /**
     * 初始化令牌配置
     * @return 业务方提供初始化令牌配置
     */
    List<RateLimiterConfig> init();

    /**
     * 如果调用配置失败，会调用配置并缓存
     * @param form 限流业务
     * @return 限流业务配置
     */
    RateLimiterConfig config(RateLimiterForm form);

    /**
     * 触发限流时的提示消息
     * @param key 令牌标识，例如：用户id，业务id
     * @return 提示消息
     */
    String message(String key);
}
